package interfaceTexto;

import java.util.ArrayList;
import java.util.List;

import logica.FachadaLogica;
import logica.exceptions.CategoryDoesNotExistException;
import logica.exceptions.UserNotAuthenticatedException;

public class MenuCadastrarProduct extends AbstractReader {
	private final String menuCadastroProductString = lineSeparator
			+ "Cadastre seu produto aqui: " + lineSeparator;

	protected List<String> categorias;

	protected String userLogin;

	protected MenuUser menuUser;
	protected FachadaLogica fachadaLogica;
	public MenuCadastrarProduct(String userLogin, MenuUser menuUser, FachadaLogica fachadaLogica)
			throws CategoryDoesNotExistException {
		this.fachadaLogica = fachadaLogica;
		this.userLogin = userLogin;
		this.menuUser = menuUser;
		this.categorias = fachadaLogica.getCategories();
	}

	protected int getProductCategoryID() throws CategoryDoesNotExistException {
		int att2;

		ArrayList<String> idS = new ArrayList<String>();
		while (true) {
			System.out.print("Escolha dentre as opcoes: ");
			for (int i = 0; i < categorias.size(); i++) {
				System.out.print(fachadaLogica.getCategoryAttribute(categorias.get(i), "name")
						+ "(" + categorias.get(i) + "); ");
				idS.add(categorias.get(i));
			}
			att2 = intReader("opcao");
			try {
				if (!idS.contains(att2 + "")) {
					System.out
							.println("Categoria nao existe, repita por favor!");
					continue;
				}
			} catch (Exception e) {
				System.out.println("Entrada invalida, repita por favor!");
				continue;
			}
			return att2;
		}

	}

	public void telaDeCadastrarProduto() throws UserNotAuthenticatedException, CategoryDoesNotExistException {
		String nome, descricao, tipo, status;
		int qnt, categoriaId, qntInteresses;
		double preco;
		while (true) {
			System.out.println();
			System.out.println("Cadastrar Produtos, modo texto");
			System.out.println(menuCadastroProductString);
			if (categorias.isEmpty()) {
				System.out
						.println("Nao existem categorias cadastradas, nao sera possivel adicionar produtos");
				break;
			}
			nome = stringReader("Nome");
			descricao = stringReader("Descricao");
			tipo = getProductType();
			qnt = intReader("Quantidade");
			categoriaId = getProductCategoryID();
			qntInteresses = intReader("Quantidade inicial de Interesses");
			preco = doubleReader("preco Inicial");

			if (qntInteresses == 0) {
				status = "disponivel";
			} else
				status = "nao disponivel";

			try {
				fachadaLogica.saveProduct(userLogin, nome, descricao, ""
						+ categoriaId, status, ""+qnt,""+ qntInteresses, ""+preco, tipo);
			} catch (Exception e) {
				e.printStackTrace();
			}
			menuUser.telaDeUserOpt();

		}
	}

	private String getProductType() {
		String type;
		while (true) {
			type = stringReader("Simples(S) ou agrupamento(G)");
			if (type.trim().toUpperCase().equals("S")) {
				return "SIMPLE";
			} else if (type.trim().toUpperCase().equals("G")) {
				return "GROUP";
			}
		}
	}

}
